package process;

import java.util.logging.SimpleFormatter;

/**
 * @Author:cjj
 * 进程
 *  进程是程序执行时的一个实例。在计算机中,每个进程都有独立的内存空间,包括代码
 *  数据和堆栈等。同时拥有一组系统资源,如文件描述符，信号,处理器状态等。
 *  特点：
 *   独立性：每个进程在执行过程中都是独立的,一个进程的崩溃不会影响其他进程。
 *   资源分配：操作系统为每个进程分配独立的内存空间和资源,进程间相互隔离。
 *   可调度性：操作系统可以对进程进行调度,分配处理器时间片,以实现多任务并发执行。
 *
 * 线程(Thread)
 *  定义：线程是进程内的一个执行单元,是操作系统能够进行运算调度的最小单位。一个进程可以包含多个线程,它们共享进程的资源
 *      如内存,文件等。
 * 特点：
 *    共享资源：同一进程内的线程共享进程的地址空间和系统资源,可以直接访问共享数据。
 *    轻量级：相对于进程来说,线程的创建和切换开销较小,可以更高效地实现并发。
 *    并发性：多个线程可以在同一进程内并发执行,提高程序的响应速度和资源利用率。
 *
 *  多线程(Multithreading)
 *  定义：多线程是指在单个进程内同时执行多个线程的机制。一个进程可以包含多个线程,每个线程独立执行不同的任务,共享进程的资源。
 *  特点：
 *    轻量级：线程是进程内的一个执行单元,相对于进程来说创建和切换开销较小。
 *    共享资源：统一进程内的线程共享地址空间,文件描述符等进程资源,可以直接访问共享数据。
 *    通信简便：线程之间的通信和同步相对较为简单,可以使用共享内存,信号量,互斥锁等机制。
 *
 * 多进程(Multiprocessing)
 *  定义：多进程是指在操作系统中同时执行多个独立的进程,每个进程有自己独立的地址空间和资源。
 *  特点：
 *   独立性：每个进程拥有独立的内存空间和资源,一个进程的崩溃不会影响其他进程
 *   进程间通信：进程间通信需要借助操作系统提供的机制,如管道,消息队列,共享内存等。
 *   开销较大：与线程相比,创建和切换进程的开销较大,因为进程需要分配独立的内存空间。
 */
public class Process {

    /**
     * 1.单线程单进程：一个进程中只有一个线程,所有任务由这个单线程执行。
     * 2.单线程多进程：一个进程中包含多个线程,这些线程可以并发执行,但共享进程的资源。
     * 3.多进程单线程：每个进程都有自己独立的资源和内存空间,每个进程中只有一个线程。
     * 4.多进程多线程：每个进程都有自己独立的资源和内存空间,每个进程内部包含多个线程,这些线程可以并发执行并共享进程的资源。
     */

    /**
     * 二.资源分配
     *  进程
     *   1.私有资源：
     *     地址空间：每个进程都有自己独立的地址空间,这包括代码段,数据段,堆和堆栈
     *     文件描述符表：每个进程有自己的文件描述符表,用于管理打开的文件和I/O设备。
     *     信号处理：每个进程有自己的信号处理机制,独立于其他进程。
     *     安全属性：每个进程有自己的用户ID和权限信息。
     *  2.共享资源：
     *     共享内存：尽管进程之间通常是独立的,但可以通过共享内存区段进行通信。
     *     信号量：用于进程间同步,可以在多个进程之间共享。
     *     消息队列：一种进程间通信机制,允许进程间发送和接受消息。
     */

    /**
     * 线程：
     *  私有资源
     *   栈：每个线程有自己的栈,用于存储局部变量,函数调用信息等。
     *   寄存器：每个线程有自己独立的寄存器状态,包括程序计数器(PC)
     *   线程控制块(TCB):每个线程有自己的控制信息,如线程ID,状态,优先级等。
     *  共享资源：
     *   地址空间：同一进程内的所有线程共享相同的地址空间,包括代码段,数据段和堆。
     *   全局变量：所有线程可以访问同一进程的全局变量。
     *   文件描述符表：每个线程可以访问和操作同一进程的文件描述符表。
     *   动态内存：线程共享同一进程的堆区,可以通过动态内存分配进行共享数据的读写
     */
}
